#ifndef CONTACT_CONTACTABSTRACTCONTACT_H
#define CONTACT_CONTACTABSTRACTCONTACT_H


#include <QObject>
#include <QPointer>


namespace Account {
class Member;
class User;
class Buddy;
}

namespace Contact {

class AbstractContact : public QObject
{
    Q_OBJECT
public:
    enum Type {
        PrivateType = 1,
        GroupType = 2,
        UnknowType = -1
    };

private:
    int m_unreadMessage;

signals:
    void dataChanged(AbstractContact *contact);
    void lastContactTimeUpdated(AbstractContact *contact);
    void unreadMessageChanged(AbstractContact *contact);

public:
    AbstractContact(QObject *parent = 0);

public:
    virtual Type type() const = 0;
    virtual int id() const = 0;


public:
    void setUnreadMessage(int count);
    int unreadMessage() const;
    void increaseUnreadMessage(int increment);
};

} // namespace Contact

#endif // CONTACT_CONTACTABSTRACTCONTACT_H
